1
Concorrenza sul Pianeta Rosso
AI017Lesson 8
00:00

La concorrenza sul Pianeta Rosso è l'arte di gestire più operazioni indipendenti—come la navigazione dei rover, i dati di telemetria sulla vita e i collegamenti con i satelliti—senza che il sistema si blocchi. In Go, un task in esecuzione indipendente è noto come un goroutine.

1. Il principio della non determinismo

È meglio assumere sempre che le operazioni in diverse goroutine possano essere eseguite in qualsiasi ordine. Poiché il runtime di Go programma le attività su core disponibili, non possiamo contare sul fatto che un rover termini lo scanning prima che un altro inizi la trasmissione senza una sincronizzazione esplicita.

go printGopher(c) // Avvia un nuovo compito indipendente

2. Meccanismi di sincronizzazione

Per gestire queste attività, Go fornisce due strumenti principali:

  • Esclusione mutua: Le goroutine possono usare un mutex per escludersi a vicenda dal fare qualcosa nello stesso momento.
  • L'istruzione Select: Ricorda uno statement switch in cui ogni caso contiene una ricezione o invio su un canale. select aspetta fino a quando un caso è pronto e poi lo esegue.
Gestore Gopher(Casco e Blocco Note)SELEZIONARover AlphaRover Beta

3. Lo scheletro del lavoratore

I lavoratori a lungo termine utilizzano tipicamente un ciclo infinito combinato con select per monitorare simultaneamente più canali di comunicazione:

func worker() {
for {
select {
// Aspetta qui per i canali.
}
}
}
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>